package com.atguigu.srb.base.config;

import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.function.Predicate;

/**
 * FileName: SwaggerTwoConfig
 * Author: ccy
 * Description:swagger2配置
 * Date:   2025/4/10 22:29
 */

@Configuration
@EnableSwagger2
public class SwaggerTwoConfig {

    /**
     * swagger2配置
     * @return Docket
     */
    /*@Bean
    public Docket apiConfig() {
        return new Docket(DocumentationType.SWAGGER_2);
    }*/

    /**
     * swagger2配置--分组,分组名字随便起
     * groupName() : 用于分组
     * select() : 过滤器
     * paths() : 过滤路径
     * apiInfo(adminApiInfo()) : 封装文档描述信息
     *
     * @return Docket
     */
    @Bean
    public Docket adminApiConfig() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("adminApi")
                .apiInfo(adminApiInfo())
                .select()
                .paths(Predicates.and(PathSelectors.regex("/admin/.*")))
                .build();
    }

    /**
     * swagger2配置--分组
     * @return Docket
     */
    @Bean
    public Docket webApiConfig() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                .select()
                .paths(Predicates.and(PathSelectors.regex("/api/.*")))
                .build();
    }

    /**
     *  adminApi-封装swagger2文档描述
     * @return ApiInfo
     */
    private ApiInfo adminApiInfo() {
        return new ApiInfoBuilder()
                .title("尚融宝后台管理系统API文档")
                .description("本文档描述了尚融宝后台管理系统的各个模块的接口的调用")
                .version("1.6")
                .contact(new Contact("ccy", "http://atguigu.com", "admin@atguigu.com"))
                .build();
    }

    /**
     *  webApi-封装swagger2文档描述
     * @return ApiInfo
     */
    private ApiInfo webApiInfo() {
        return new ApiInfoBuilder()
                .title("尚融宝网站API文档")
                .description("本文档描述了尚融宝网站各个模块的接口的调用")
                .version("1.6")
                .contact(new Contact("ccy", "http://atguigu.com", "web@atguigu.com"))
                .build();
    }



}
